package com.ruoyi.system.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.AuditRoute;

/**
 * 审核路径实例（节点级）Service接口
 * 
 * @author ruoyi
 * @date 2025-11-07
 */
public interface IAuditRouteService extends IService<AuditRoute>
{
    /**
     * 查询审核路径实例（节点级）
     * 
     * @param auditRouteId 审核路径实例（节点级）主键
     * @return 审核路径实例（节点级）
     */
    public AuditRoute selectAuditRouteByAuditRouteId(Long auditRouteId);

    /**
     * 查询审核路径实例（节点级）列表
     * 
     * @param auditRoute 审核路径实例（节点级）
     * @return 审核路径实例（节点级）集合
     */
    public List<AuditRoute> selectAuditRouteList(AuditRoute auditRoute);

    /**
     * 新增审核路径实例（节点级）
     * 
     * @param auditRoute 审核路径实例（节点级）
     * @return 结果
     */
    public int insertAuditRoute(AuditRoute auditRoute);
    
    /**
     * 批量新增审核路径实例（节点级）
     * 
     * @param auditRoutes 审核路径实例（节点级）列表
     * @return 结果
     */
    public int insertAuditRoutes(List<AuditRoute> auditRoutes);

    /**
     * 修改审核路径实例（节点级）
     * 
     * @param auditRoute 审核路径实例（节点级）
     * @return 结果
     */
    public int updateAuditRoute(AuditRoute auditRoute);

    /**
     * 批量删除审核路径实例（节点级）
     * 
     * @param auditRouteIds 需要删除的审核路径实例（节点级）主键集合
     * @return 结果
     */
    public int deleteAuditRouteByAuditRouteIds(String[] auditRouteIds);

    /**
     * 删除审核路径实例（节点级）信息
     * 
     * @param auditRouteId 审核路径实例（节点级）主键
     * @return 结果
     */
    public int deleteAuditRouteByAuditRouteId(String auditRouteId);

    /**
     * 初始化审批流程
     *
     * @param auditBusinessType 审批业务类型
     * @param businessId 业务ID
     * @return 当前审核路径ID
     */
    public Long initAuditRoute(String auditBusinessType, Long businessId);
    
    /**
     * 根据审核业务类型和业务ID查询审核路径实例列表（包含审核人信息）
     * 
     * @param auditBusinessType 审核业务类型
     * @param businessId 业务ID
     * @return 审核路径实例集合
     */
    public List<AuditRoute> selectAuditRoutesByBusinessTypeAndBusinessId(String auditBusinessType, Long businessId);
    
    /**
     * 根据审核业务类型和业务ID查询审核路径实例列表（包含审核人信息），按轮次分组
     *
     * @param auditBusinessType 审核业务类型
     * @param businessId 业务ID
     * @return 审核路径实例集合，按轮次分组排序
     */
    public List<AuditRoute> selectAuditRoutesByBusinessTypeAndBusinessIdGroupByRound(String auditBusinessType, Long businessId);

    /**
     * 查询可驳回节点列表（按顺序去重）
     *
     * @param businessId 业务ID
     * @param auditBusinessType 审批业务类型
     * @param currentRouteId 当前路径ID
     * @return 可驳回节点集合
     */
    List<AuditRoute> selectRollbackOptions(Long businessId, String auditBusinessType, Long currentRouteId);
}